/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.List;
import model.Morador;
import org.hibernate.JDBCException;
import org.hibernate.Session;
import util.HibernateUtil;

/**
 *
 * @author Wagner Segato dos Santos
 */
public class MoradorDAO {

    // Atributo
    private static Session session;

    // Construtor padrão
    public MoradorDAO() {
    }

    /** Inserir registro no banco de dados */
    public static void inserir(Morador morador) throws Exception {
        try {
            session = HibernateUtil.getSessionFactory();
            session.beginTransaction();
            session.save(morador);
            session.getTransaction().commit();
        } catch (JDBCException e) {
            throw new Exception(e.getSQLException());
        } finally {
            session.close();
        }
    }

    /** Atualizar registro do banco de dados */
    public static void atualizar(Morador morador) throws Exception {
        try {
            session = HibernateUtil.getSessionFactory();
            session.beginTransaction();
            session.merge(morador);
            session.flush();
            session.getTransaction().commit();
        } catch (JDBCException e) {
            throw new Exception(e.getSQLException());
        } finally {
            session.close();
        }
    }

    /** Excluir registro do banco de dados */
    public static void excluir(Morador morador) throws Exception {
        try {
            session = HibernateUtil.getSessionFactory();
            session.beginTransaction();
            session.delete(morador);
            session.getTransaction().commit();
        } catch (JDBCException e) {
            throw new Exception(e.getSQLException());
        } finally {
            session.close();
        }
    }

    /** Pegar registro do banco de dados por ID */
    public static Morador getMorador(int id) throws Exception {
        try {
            session = HibernateUtil.getSessionFactory();
            Morador morador = (Morador) session.get(Morador.class, new Integer(id));
            return morador;
        } catch (JDBCException e) {
            throw new Exception(e.getSQLException());
        } finally {
            session.close();
        }
    }
        /** Pegar morador por nome */
    public static Morador getNome(String nome) throws Exception {
        try {
            session = HibernateUtil.getSessionFactory();
            Morador morador = (Morador) session.createQuery(
                    "FROM Morador WHERE nome = :nome").setString("nome", nome).uniqueResult();
            return morador;
        } catch (JDBCException e) {
            throw new Exception(e.getSQLException());
        } finally {
            session.close();
        }
    }

    /** Pegar lista contendo todos os registros do banco de dados  */
    public static List<Morador> getListaMorador() throws Exception {
        try {
            session = HibernateUtil.getSessionFactory();
            List<Morador> moradores = session.createQuery("FROM Morador").list();
            return moradores;
        } catch (JDBCException e) {
            throw new Exception(e.getSQLException());
        } finally {
            session.close();
        }
    }
}
